package listbyorder.access001_100.test31;

import java.util.Arrays;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/5/30 9:53
 */
public class Solution1 {

    // 方法一：自己写的方法
    // 首先从数组尾部向前进行遍历
    // 如果当前数组是逆序的状态，则直接反转数组即可
    // 如果遍历到当前元素大于前面一个元素
    // 则从当前元素开始向后进行排序
    // 排序之后从当前位置开始向后遍历，找到第一个大于i-1位置的元素，然后交换即可
    public void nextPermutation(int[] nums) {
        int len = nums.length;
        int i = len - 1;
        for (; i > 0; i--) {
            if (nums[i] > nums[i - 1]) {
                Arrays.sort(nums, i, len - 1);
                int j = i;
                for (; j < len; j++) {
                    if(nums[j] > nums[i - 1]){
                        break;
                    }
                }
                swap(nums, j, i - 1);
                break;
            }
        }
        if (i == 0) {
            // 逆序nums即可
            while (i < len / 2) {
                swap(nums, i, len - 1 - i);
                i++;
            }
        }
    }

    private void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}
